package com.ali.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则相关工具类
 *
 * @author jack.wu
 * @version 1.0
 * @date 2020/8/19
 */
public class RegexUtils {

    /**
     * 正常字符规则（根据自己需求制定）
     */
    private static final String NORMAL_CHARACTERS = "[a-z]*[A-Z]*\\d*-*_*\\s*";

    /**
     * 邮箱校验
     *
     * @param email 邮箱
     * @return true是邮箱  false不是邮箱
     */
    public static boolean checkEmail(String email) {
        boolean flag;
        try {
            String check = "^([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile(check);
            Matcher matcher = regex.matcher(email);
            flag = matcher.matches();
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

    /**
     * ip地址校验
     *
     * @param ip ip地址
     * @return true校验成功 false校验失败
     */
    public static boolean isIp(String ip) {
        if (StringUtils.isEmpty(ip)) {
            return false;
        }
        String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
                + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
                + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
                + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";

        return ip.matches(regex);
    }

    /**
     * 判断是否含有特殊字符
     *
     * @param text 需要判断的文本
     * @return true不包含 false包含
     */
    public static boolean hasSpecialChar(String text) {
        if (StringUtils.isEmpty(text)) {
            return false;
        }
        return text.replaceAll(NORMAL_CHARACTERS, "").length() == 0;
    }

    /**
     * 判断是否为正整数
     *
     * @param number 需要判断的数
     * @return true满足 false不满足
     */
    public static boolean isNumber(String number) {
        if (StringUtils.isEmpty(number)) {
            return false;
        }
        String regex = "[0-9]*";
        return number.matches(regex);
    }

    /**
     * 判断是否是移动手机号码
     *
     * @param phoneNumber 移动手机号码
     * @return true是 false不是
     */
    public static boolean isMobilePhoneNumber(String phoneNumber) {
        if (StringUtils.isEmpty(phoneNumber)) {
            return false;
        }
        String regex = "^((13[0-9])|(15[0-9])|(18[1-9]))\\d{8}$";
        return phoneNumber.matches(regex);
    }

    /**
     * 判断是否是手机号码
     *
     * @param phoneNumber 手机号码
     * @return true是 false不是
     */
    public static boolean isPhoneNumber(String phoneNumber) {
        if (StringUtils.isEmpty(phoneNumber)) {
            return false;
        }
        String regex = "^1\\d{10}$";
        return phoneNumber.matches(regex);
    }

    /**
     * 匹配中国邮政编码
     *
     * @param postcode 中国邮政编码
     * @return true是 false不是
     */
    public static boolean checkPostcode(String postcode) {
        String regex = "[1-9]\\d{5}";
        return Pattern.matches(regex, postcode);
    }


    private RegexUtils() {
    }
}
